﻿#define _CRT_SECURE_NO_WARNINGS 1

//1、空指针 2、空白字符 3、空格字符 4、长字符串 5、非数字字符 6、-+

#include <stdio.h>
#include <assert.h>
#include <limits.h>
#include <string.h>
#include <ctype.h>

enum Statu
{
	VALID,
	UNVALID
};

enum Statu states = UNVALID;

int my_atoi(const char* str)
{
	assert(str);
	if (*str == '\0')
		return 0;

	//空格字符     
	while (isspace(*str))
	{
		++str;
	}
	//-+
	int flag = 0;
	if (*str == '+')
	{
		flag = 1;
		++str;
	}
	else if (*str == '-')
	{
		flag = -1;
		++str;
	}

	long long n = 0;
	while (isdigit(*str))
	{
		n = n * 10 + (*str - '0') * flag;
		if (n < INT_MIN || n > INT_MAX)
			break;

		++str;
	}

	if (*str == '\0')
		states = VALID;

	return (int)n;
}

//char* my_strncat(char* dest, const char* src, size_t count)
//{
//	//strncat()函数实现主要分两种情况：count == 0;(*dest++ = *src++) == 0
//	char* ret = dest;
//	assert(dest);
//
//	while (*dest)
//	{
//		++dest;
//	}
//
//	while (count && (*dest++ = *src++))
//	{
//		--count;
//	}
//
//	if (count >= 0)
//	{
//		*dest = '\0';
//	}
//
//	return ret;
//}

char* my_strncat(char* dest, const char* src, size_t count)
{
	char* ret = dest;
	assert(dest);

	while (*dest)
	{
		++dest;
	}

	while (count && (*dest++ = *src++))
	{
		--count;
	}

	if (count)
	{
		*dest = '\0';
	}

	return ret;
}

//char* my_strncpy(char* dest, const char* src, size_t count)
//{
//	char* ret = dest;
//	assert(dest);
//
//	while (count--)
//	{
//		*dest = *src;
//
//		if (*src != '\0')
//			++src;
//		++dest;
//	}
//
//	return ret;
//}

char* my_strncpy(char* dest, const char* src, size_t count)
{
	char* ret = dest;
	assert(dest);

	while (count && (*dest++ = *src++))
	{
		--count;
	}

	if (count)
	{
		while (--count)
		{
			*dest++ = '\0';
		}
	}

	return ret;
}
//
//int main()
//{
//	//char dest[20] = "XXXXXXXXXX";
//	//const char* src = "he";
//
//	//my_strncpy(dest, src, 5);
//
//	int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
//
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int tem = 0;
//	
//	int i = 0;
//	for (i = 0; i < sz; ++i)
//	{
//		tem ^= arr[i];
//	}
//
//	int n = 1;
//	for (i = 0; i < 32; ++i)
//	{
//		if ((tem >> i) & 1)
//		{
//			n <<= i;
//			break;
//		}
//	}
//
//	int ret1 = 0;
//	for (i = 0; i < sz; ++i)
//	{
//		if (arr[i] & n)
//			ret1 ^= arr[i];
//	}
//	int ret2 = tem ^ ret1;
//
//	printf("%d %d\n", ret1, ret2);
//
//
//	return 0;
//}

//int main()
//{
//	int a, b;
//	scanf("%d%d", &a, &b);
//	int yuu[5];
//	int muu[6];
//	for (int i = 0; i < a; i++)
//	{
//		scanf("%d", &yuu[i]);
//	}
//	//printf("\n");
//	for (int j = 0; j < b; j++)
//	{
//		scanf("%d", &muu[j]);
//	}
//	int m = a + b;
//	//scanf("%d",&m);
//	int nuu[11];
//	for (int i = 0; i < a; i++)
//	{
//		//    int tmp=yuu[0];
//		nuu[i] = yuu[i];
//	}
//	for (int p = 0; p < b; p++)
//	{
//		//    int tmp=yuu[0];
//		//nuu[a + p - 1] = muu[p]; //这儿没有减一，你-1就是访问到了你上次放进来的yuu的最后一个了
//		nuu[a + p] = muu[p];
//	}
//	//int max=nuu[0];
//	for (int o = 0; o < m; o++)
//	{
//		printf("%d ", nuu[o]);
//	}
//	printf("\n");
//	//for (int y = 0; y < m; y++) //你这的排序有问题
//	for (int y = 0; y < m - 1; y++) //排序的趟数
//	{
//		//for (int k = 1; k < m; k++) //你这儿还会越界，所以你的排序完就会有0这些不是你输入的数
//		for (int k = 1; k < m-1-y; k++) //比较次数
//		{
//			if (nuu[k] > nuu[k + 1])
//			{
//				int tmp = nuu[k];
//				nuu[k] = nuu[k + 1];
//				nuu[k + 1] = tmp;
//			}
//		}
//
//		//if(nuu[y]>max)
//				//max=nuu[y];
//	}
//	//    printf("\n");
//	for (int o = 0; o < m; o++)
//	{
//		printf("%d ", nuu[o]);
//	}
//
//	return 0;
//}


//
//#define MAX_SIZE A+B
//struct _Record_Struct
//{
//	unsigned char Env_Alarm_ID : 4;
//	unsigned char Para1 : 2;
//	unsigned char state;
//	unsigned char avail : 1;
//}*Env_Alarm_Record;
//struct _Record_Struct* pointer = (struct _Record_Struct*)malloc(sizeof(struct _Record_Struct) * 2 + 3);

//enum A
//{
//	a,
//	b,
//	c,
//};
//
//int main()
//{
//
//	printf("%d %d %d\n", a, b, c);
//
//	return 0;
//}


//
//#include <stdio.h>
//
//int main()
//{
//	int n = 0;
//	int m = 0;
//	scanf("%d %d", &n, &m);
//
//	int arr1[5];
//	int arr2[6];
//
//	int i = 0;
//	for (i = 0; i < n; ++i)
//	{
//		scanf("%d", &arr1[i]);
//	}
//	for (i = 0; i < m; ++i)
//	{
//		scanf("%d", &arr2[i]);
//	}
//
//	i = 0;
//	int j = 0;
//	while (i < n && j < m)
//	{
//		if (arr1[i] < arr2[j])
//		{
//			printf("%d ", arr1[i]);
//			++i;
//		}
//		else
//		{
//			printf("%d ", arr2[j]);
//			++j;
//		}
//	}
//
//	if (i < n)
//	{
//		while (i < n)
//		{
//			printf("%d ", arr1[i]);
//			++i;
//		}
//	}
//
//	if (j < m)
//	{
//		while (j < m)
//		{
//			printf("%d ", arr2[j]);
//			++j;
//		}
//	}
//
//	printf("\n");
//
//	return 0;
//}


void* my_memmove(void* dest, const void* src, size_t sz)
{
	void* ret = dest;
	assert(dest && src);

	//判断dest在src的前面还是后面
	if (dest < src) //就是memcpy
	{
		while (sz--)
		{
			*(((char*)dest)++) = *(((char*)src)++);
		}
	}
	else
	{
		while (sz--)
		{
			*((char*)dest + sz) = *((char*)src + sz);
		}
	}

	return ret;
}

void* my_memcpy(void* dest, const void* src, size_t sz)
{
	void* ret = dest;
	assert(dest && src);

	while (sz--)
	{
		*((char*)dest) = *((char*)src);
		++((char*)dest);
		++((char*)src);
	}

	return ret;
}

size_t my_strlen(const char* p)
{
	assert(p);
	size_t len = 0;

	while (*p)
	{
		++len;
		++p;
	}

	return len;
}

char* my_strcpy(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest && src);

	while (*dest++ = *src++)
	{
		;
	}

	return dest;
}

//int my_strcmp(const char* str1, const char* str2)
//{
//	assert(str1 && str2);
//
//	while (*str1 == *str2)
//	{
//		if (*str1 == '\0')
//			return 0;
//
//		++str1;
//		++str2;
//	}
//
//	return *str1 - *str2;
//}

char* my_strcat(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest && src);

	while (*dest)
	{
		++dest;
	}

	while (*dest++ = *src++)
	{
		;
	}

	return ret;
}


char* my_strstr(const char* str, const char* substr)
{
	assert(str && substr);

	if (*substr == '\0') //""
		return (char*)str;

	while (*str)
	{
		const char* str1 = str;
		const char* substr1 = substr;
		while (*str1 && *substr1 && *str1 == *substr1)
		{
			++str1;
			++substr1;
		}

		if (*substr1 == '\0')
			return (char*)str;

		++str;
	}

	return NULL;
}

void Swap(char* p1, char* p2, size_t sz)
{
	size_t i = 0;
	for (i = 0; i < sz; ++i)
	{
		char tem = *(p1+i);
		*(p1+i) = *(p2+i);
		*(p2 + i) = tem;
	}
}
void BubSort(void* arr, size_t sz, size_t count, int (*pf)(const void*, const void*))
{
	assert(arr);

	size_t i = 0;
	size_t j = 0;
	for (i = 0; i < count - 1; ++i)
	{
		for (j = 0; j < count - 1 - i; ++j)
		{
			char* p1 = (char*)arr + j * sz;
			char* p2 = p1 + sz;
			if (pf(p1, p2) > 0)
			{
				Swap(p1, p2, sz);
			}
		}
	}
}
//
//给定s1 = AABCD和s2 = BCDAA，返回1
//
//给定s1 = abcd和s2 = ACBD，返回0.

int fun(const char* str, const char* find)
{
	assert(str && find);

	if (strlen(str) == strlen(find))
	{
		char tem[256] = { 0 };
		strcpy(tem, str);
		strcat(tem, str);

		return strstr(tem, find) != NULL;
	}
	else
	{
		return 0;
	}
}

int findnum(int a[][3], int x, int y, int f)
{
	int i = x - 1;
	int j = 0;
	while (i >= 0 && j < y)
	{
		if (a[i][j] > f)
		{
			--i;
		}
		else if (a[i][j] < f)
		{
			++j;
		}
		else
		{
			return 1;
		}
	}

	return 0;
}


//void yangHuiTriangle(int n)
//{
//	int arr[30][30] = { 0 };
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < n; ++i)
//	{
//		for (j = 0; j <= i; ++j)
//		{
//			if (i == j)
//				arr[i][j] = 1;
//			else if (j == 0)
//				arr[i][j] = 1;
//			else
//				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
//		}
//	}
//
//	for (i = 0; i < n; ++i)
//	{
//		for (j = 0; j <= i; ++j)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//}

//void yangHuiTriangle(int n)
//{
//	int data[30] = { 1 };
//
//	int i, j;
//	printf("1\n"); //第一行就直接打印了
//	for (i = 1; i < n; i++) //从第二行开始
//	{
//		for (j = i; j > 0; j--) //从后向前填，避免上一行的数据在使用前就被覆盖
//		{
//			data[j] += data[j - 1]; //公式同上，由于变成了一维，公式也变简单了。
//		}
//
//		for (j = 0; j <= i; j++) //这一行填完就直接打印了。
//		{
//			printf("%d ", data[j]);
//		}
//		putchar('\n');
//	}
//}

//void yangHuiTriangle(int n)
//{
//	int arr[30] = { 1 };
//	printf("1\n");
//
//	int i = 0;
//	int j = 0;
//	for (i = 1; i < n; ++i)
//	{
//		for (j = i; j > 0; --j)
//		{
//			arr[j] += arr[j - 1];
//		}
//
//		for (j = 0; j <= i; ++j)
//		{
//			printf("%d ", arr[j]);
//		}
//		printf("\n");
//	}
//}

//int main()
//{
//	//int arr1[10] = { 0 };
//	//int arr2[10] = { 1,2,3,4,5,6,7,8,9,10 };
//
//	//my_memcpy(arr1, arr2, 10 * sizeof(int));
//
//	//printf("%u\n", my_strlen("abcdef"));
//
//	//char arr1[] = "xxxxxxxxxxx";
//	//char arr2[] = "hello bit";
//
//	//my_strcpy(arr1, arr2);
//
//	yangHuiTriangle(6);
//
//	return 0;
//}


//A说：不是我。
//
//B说：是C。
//
//C说：是D。
//
//D说：C在胡说
//
//已知3个人说了真话，1个人说的是假话。

//int main()
//{
//	char k = 0;
//	for (k = 'a'; k <= 'd'; ++k)
//	{
//		if ((k != 'a') + (k == 'c') + (k == 'd') + (k != 'd') == 3)
//		{
//			printf("凶手是：%c\n", k);
//		}
//	}
//
//	return 0;
//}



#include <stdio.h>

int main()
{
	size_t n = 0;
	scanf("%d", &n);

	int sum = 0;
	int tem = 10;
	while (n)
	{
		int i = n % 10;
		int flag = 0;
		if (i % 2 != 0)
			flag = 1;

		sum += flag * tem;

		tem *= 10;
		n /= 10;
	}

	printf("%d\n", sum);

	return 0;
}